package com.stock_t.config;

import org.springframework.context.annotation.Configuration;
import org.springframework.core.io.Resource;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.ViewControllerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import org.springframework.web.servlet.resource.PathResourceResolver;

import java.io.IOException;

/**
 * Web MVC配置类
 * 负责处理静态资源配置和前端路由支持
 */
@Configuration
public class WebMvcConfig implements WebMvcConfigurer {

    /**
     * 配置静态资源处理
     * 将前端构建后的静态资源映射到根路径
     */
    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        // 配置静态资源处理器，支持前端打包后的文件
        registry.addResourceHandler("/**")
                .addResourceLocations("classpath:/static/")
                .setCachePeriod(3600)
                .resourceChain(true)
                .addResolver(new PathResourceResolver() {
                    @Override
                    protected Resource getResource(String resourcePath, Resource location) throws IOException {
                        Resource requestedResource = location.createRelative(resourcePath);
                        
                        // 如果请求的资源存在，直接返回
                        if (requestedResource.exists() && requestedResource.isReadable()) {
                            return requestedResource;
                        }
                        
                        // 如果是API请求、静态资源或特殊路径，不进行重定向
                        if (resourcePath.startsWith("api/") || 
                            resourcePath.startsWith("assets/") ||
                            resourcePath.startsWith("static/") ||
                            resourcePath.contains(".")) {
                            return null;
                        }
                        
                        // 对于其他不存在的资源（前端路由），返回index.html
                        // 这样可以支持Vue Router的History模式
                        Resource fallback = location.createRelative("index.html");
                        return (fallback.exists() && fallback.isReadable()) ? fallback : null;
                    }
                });
    }

    /**
     * 配置视图控制器
     * 将根路径重定向到index.html
     */
    @Override
    public void addViewControllers(ViewControllerRegistry registry) {
        // 将根路径映射到前端入口文件
        registry.addViewController("/").setViewName("forward:/index.html");
    }
}